From a4a44538e593229db19fc4687f9c6d6362d3b70f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jes=C3=BAs=20Espino?= Date: Tue, 8 Mar 2016 17:40:39 +0100 Subject: [PATCH] Remove unwraps from crates-io lib --- src/crates-io/lib.rs | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/crates-io/lib.rs b/src/crates-io/lib.rs index 4e49dacd9..603a8e899 100644 --- a/src/crates-io/lib.rs +++ b/src/crates-io/lib.rs @@ -40,6 +40,20 @@ pub enum Error { TokenMissing, Io(io::Error), NotFound, + JsonEncodeError(json::EncoderError), + JsonDecodeError(json::DecoderError), +} + +impl From for Error { + fn from(err: json::EncoderError) -> Error { + Error::JsonEncodeError(err) + } +} + +impl From for Error { + fn from(err: json::DecoderError) -> Error { + Error::JsonDecodeError(err) + } } #[derive(RustcDecodable)] @@ -109,28 +123,28 @@ impl Registry { } pub fn add_owners(&mut self, krate: &str, owners: &[&str]) -> Result<()> { - let body = json::encode(&OwnersReq { users: owners }).unwrap(); + let body = try!(json::encode(&OwnersReq { users: owners })); let body = try!(self.put(format!("/crates/{}/owners", krate), body.as_bytes())); - assert!(json::decode::(&body).unwrap().ok); + assert!(try!(json::decode::(&body)).ok); Ok(()) } pub fn remove_owners(&mut self, krate: &str, owners: &[&str]) -> Result<()> { - let body = json::encode(&OwnersReq { users: owners }).unwrap(); + let body = try!(json::encode(&OwnersReq { users: owners })); let body = try!(self.delete(format!("/crates/{}/owners", krate), Some(body.as_bytes()))); - assert!(json::decode::(&body).unwrap().ok); + assert!(try!(json::decode::(&body)).ok); Ok(()) } pub fn list_owners(&mut self, krate: &str) -> Result> { let body = try!(self.get(format!("/crates/{}/owners", krate))); - Ok(json::decode::(&body).unwrap().users) + Ok(try!(json::decode::(&body)).users) } pub fn publish(&mut self, krate: &NewCrate, tarball: &Path) -> Result<()> { - let json = json::encode(krate).unwrap(); + let json = try!(json::encode(krate)); // Prepare the body. The format of the upload request is: // // @@ -181,21 +195,21 @@ impl Registry { None, Get, Auth::Unauthorized )); - let crates = json::decode::(&body).unwrap(); + let crates = try!(json::decode::(&body)); Ok((crates.crates, crates.meta.total)) } pub fn yank(&mut self, krate: &str, version: &str) -> Result<()> { let body = try!(self.delete(format!("/crates/{}/{}/yank", krate, version), None)); - assert!(json::decode::(&body).unwrap().ok); + assert!(try!(json::decode::(&body)).ok); Ok(()) } pub fn unyank(&mut self, krate: &str, version: &str) -> Result<()> { let body = try!(self.put(format!("/crates/{}/{}/unyank", krate, version), &[])); - assert!(json::decode::(&body).unwrap().ok); + assert!(try!(json::decode::(&body)).ok); Ok(()) } @@ -274,6 +288,8 @@ impl fmt::Display for Error { Error::TokenMissing => write!(f, "no upload token found, please run `cargo login`"), Error::Io(ref e) => write!(f, "io error: {}", e), Error::NotFound => write!(f, "cannot find crate"), + Error::JsonEncodeError(ref e) => write!(f, "json encode error: {}", e), + Error::JsonDecodeError(ref e) => write!(f, "json decode error: {}", e), } } } -- 2.30.2